﻿using System;

namespace BSharp.Compiler.Emit
{
	public abstract class IntermediateCompiler
	{
		public abstract void Compile (And and);
		public abstract void Compile (Bor bor);
		public abstract void Compile (Add add);
		public abstract void Compile (Addi addi);
		public abstract void Compile (Sub sub);
		public abstract void Compile (Mul mul);
		public abstract void Compile (Muli muli);
		public abstract void Compile (Div div);
		public abstract void Compile (Mod mod);
		public abstract void Compile (LoadLocal ldloc);
		public abstract void Compile (StoreLocal stloc);
		public abstract void Compile (StackAlloc stackAlloc);
		public abstract void Compile (LoadRegister ldreg);
		public abstract void Compile (PushArgument pushArg);
		public abstract void Compile (PopArgument popArg);
		public abstract void Compile (CallDirect call);
		public abstract void Compile (CallIndirect call);
		public abstract void Compile (Ret ret);
		public abstract void Compile (Enter enter);
		public abstract void Compile (DefineLabel labelDef);
		public abstract void Compile (LoadWord loadWord);
		public abstract void Compile (StoreWord word);
		public abstract void Compile (AddressOf addressOf);
		public abstract void Compile (Bra bra);
		public abstract void Compile (Bz bz);
		public abstract void Compile (Bnz bnz);
		public abstract void Compile (TestIfEqual teq);
		public abstract void Compile (TestIfNotEqual tne);
		public abstract void Compile (TestIfGreaterThan tg);
		public abstract void Compile (TestIfGreaterThanOrEqual tge);
		public abstract void Compile (TestIfLessThan tg);
		public abstract void Compile (TestIfLessThanOrEqual tle);
	}
}

